% File src/library/utils/man/windows/arrangeWindows.Rd
% Part of the R package, http://www.R-project.org
% Copyright 2009 Duncan Murdoch and the R Core Development Team
% Distributed under GPL 2 or later

\name{arrangeWindows}
\alias{arrangeWindows}
\title{
Rearrange windows in the R GUI.
}
\description{
This function allows you to tile or cascade windows, or to minimize or restore them.
}
\usage{
arrangeWindows(action, windows, preserve = TRUE, outer = FALSE)
}
\arguments{
  \item{action}{
  The action to perform on the windows.  The choices are \code{c("vertical", "horizontal", "cascade", "minimize", 
    "restore")} with default \code{"vertical"}; see the Details below for the interpretation.
    Abbreviations may be used.
    }
  \item{windows}{
  A list of window handles, by default produced by \code{\link{getWindowsHandles}()}.  
}
  \item{preserve}{
  If \code{TRUE}, when tiling preserve the outer boundary of the collection of windows; otherwise 
  make them as large as will fit.
}
  \item{outer}{
  This argument is only used in MDI mode.  If \code{TRUE}, tile the windows on the system
  desktop.  Otherwise, tile them within the MDI frame.
}
}
\details{
The actions are as follows:
\describe{
\item{\code{"vertical"}}{Tile vertically.}
\item{\code{"horizontal"}}{Tile horizontally.}
\item{\code{"cascade"}}{Cascade the windows.}
\item{\code{"minimize"}}{Minimize all of the windows.}
\item{\code{"restore"}}{Restore all of the windows to normal size (not minimized, not maximized).}
}
The tiling and cascading are done by the standard Windows API functions, but unlike those functions,
they will apply to all of the windows in the \code{windows} list.  

By default, \code{windows} is set to the result of
\code{\link{getWindowsHandles}()} (with one exception described
below).  This will select windows belonging to the current \R process.
However, if the global environment contains a variable named
\code{.arrangeWindowsDefaults}, it will be used as the argument list
instead. See the \code{\link{getWindowsHandles}} man page for a
discussion of the optional arguments to that function.

When \code{action="restore"} is used with \code{windows} unspecified,
\code{minimized = TRUE} is added to the argument list of
\code{\link{getWindowsHandles}} so that minimized windows will be restored.

In MDI mode, by default tiling and cascading will happen within the R
GUI frame. However, if \code{outer=TRUE}, tiling is done on the system
desktop. This will generally not give desirable results if any R child
windows are included within \code{windows}.

}

\value{
This function is called for the side effect of arranging the windows.
The list of window handles is returned invisibly.
}
\author{
Duncan Murdoch
}

\seealso{
\code{\link{getWindowsHandles}}
}
\examples{
\dontrun{
arrangeWindows("v")
# This default is useful only in SDI mode:  it will tile any Firefox window 
# along with the R windows
.arrangeWindowsDefaults <- list(c("R", "all"), pattern=c("", "Firefox"))
arrangeWindows("v")
}
}
\keyword{utilities}
